<?php
/**
 * bll file
 * @package app-file_lib_bll
 */
load_lib('/bll/bll');
/**
 * bll file
 * @author pandajingjing
 * @package app-file_lib_bll
 */
class bll_file extends bll_bll{

	/**
	 * 当前提供服务的域名
	 * @var string
	 */
	protected $_strDomain;

	function __construct(){
		parent::__construct();
	}

	/**
	 * 检查使用方是否是允许的域名
	 * @param string $p_strReferer
	 * @return true/string
	 */
	function chkAllowedDomain($p_strReferer){
		if(NULL===$p_strReferer){
			$this->_strDomain='unknown';
		}else{
			$this->_strDomain=parse_url($p_strReferer,PHP_URL_HOST);
		}
		load_lib('/dao/filedao');
		$arrAllowedDomain=dao_filedao::getConfig('allowed_domain');
		foreach($arrAllowedDomain as $strDomainPattern){
			if(1===preg_match($strDomainPattern,$this->_strDomain)){
				return true;
				break;
			}
		}
		return 'Err_Logic_Domain_NotMatch';
	}

	/**
	 * 给文件分配路径
	 * @param string $p_strFileKey
	 * @return string
	 */
	protected function dispatchFile($p_strFileKey){
		$intDispatchKey=abs(crc32($p_strFileKey));
		$strDir='';
		while($intDispatchKey>0){
			$strSubDir=$intDispatchKey%100;
			$strDir=$strSubDir.DIRECTORY_SEPARATOR.$strDir;
			$intDispatchKey=intval($intDispatchKey/100);
		}
		return DIRECTORY_SEPARATOR.$strDir;
	}

	/**
	 * 分配存储设备
	 * @param array $p_arrHostCfg
	 */
	protected function dispatchHostID($p_arrHostCfg){
		$arrRotation=array();
		foreach($p_arrHostCfg as $arrHost){
			if(!isset($arrHost['weight'])){
				$arrHost['weight']=1;
			}
			for($i=0;$i<$arrHost['weight'];++$i){
				$arrRotation[]=$arrHost['hostid'];
			}
		}
		return $arrRotation[rand(0,count($arrRotation)-1)];
	}
}